home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / DJSRC111.ZIP / go32 / eventque.h < prev    next >
Text File  |  1993-05-31  |  5KB  |  140 lines

  1. /**
  2.  ** EVENTQUE.H
  3.  **
  4.  **  Copyright (C) 1992, Csaba Biegl
  5.  **    820 Stirrup Dr, Nashville, TN, 37221
  6.  **    csaba@vuse.vanderbilt.edu
  7.  **
  8.  **  This file is distributed under the terms listed in the document
  9.  **  "copying.cb", available from the author at the address above.
  10.  **  A copy of "copying.cb" should accompany this file; if not, a copy
  11.  **  should be available from where this file was obtained.  This file
  12.  **  may not be distributed without a verbatim copy of "copying.cb".
  13.  **  You should also have received a copy of the GNU General Public
  14.  **  License along with this program (it is in the file "copying");
  15.  **  if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
  16.  **  Cambridge, MA 02139, USA.
  17.  **
  18.  **  This program is distributed in the hope that it will be useful,
  19.  **  but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  **  GNU General Public License for more details.
  22.  **/
  23.  
  24. #ifndef _EVENTQUE_H_
  25. #define _EVENTQUE_H_
  26.  
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30.  
  31. /*
  32.  * structures:
  33.  *  BE CAREFUL when hacking!!! -- 16 and 32 bit compilers have to generate
  34.  *  the same alignments
  35.  */
  36. typedef struct {
  37.     unsigned char   evt_type;        /* event type: 0: keyboard, 1: mouse */
  38.     unsigned char   evt_kbstat;        /* keyboard status (ALT, SHIFT, etc..) */
  39.     unsigned char   evt_mask;        /* mouse event mask */
  40.     unsigned char   evt_button;        /* button status */
  41.     unsigned short  evt_xpos;        /* X coord (or keycode if keybd event) */
  42.     unsigned short  evt_ypos;        /* Y coord */
  43.     unsigned long   evt_time;        /* time stamp of event */
  44. #define evt_keycode   evt_xpos        /* reuse this slot for keybd events !! */
  45. #define evt_scancode  evt_ypos        /* store here the BIOS scan code */
  46. } EventRecord;
  47.  
  48. typedef struct {
  49.     unsigned short  evq_maxsize;    /* max size of event queue */
  50.     unsigned short  evq_cursize;    /* number of events in the queue */
  51.     unsigned short  evq_rdptr;        /* next event to read */
  52.     unsigned short  evq_wrptr;        /* next event to be written */
  53.     short        evq_xpos;        /* current X coordinate of mouse */
  54.     short        evq_ypos;        /* current Y coordinate of mouse */
  55.     short        evq_xmin;        /* minimal mouse X coordinate */
  56.     short        evq_ymin;        /* minimal mouse Y coordinate */
  57.     short        evq_xmax;        /* maximal mouse X coordinate */
  58.     short        evq_ymax;        /* maximal mouse Y coordinate */
  59.     short        evq_xspeed;        /* horizontal speed (mickey/coord) */
  60.     short        evq_yspeed;        /* vertical speed (mickey/coord) */
  61.     unsigned short  evq_thresh;        /* fast movement threshold */
  62.     unsigned short  evq_accel;        /* multiplier for fast move */
  63.     unsigned char   evq_drawmouse;  /* interrupt handler has to draw mouse */
  64.     unsigned char   evq_moved;        /* set if mouse moved */
  65.     unsigned char   evq_delchar;    /* character removed from BIOS buffer */
  66.     unsigned char   evq_enable;        /* event generation control flag */
  67.     EventRecord        evq_events[1];  /* event buffer space */
  68. } EventQueue;
  69.  
  70. /*
  71.  * event types
  72.  */
  73. #define EVENT_KEYBD    0
  74. #define EVENT_MOUSE    1
  75.  
  76. /*
  77.  * MOUSE event flag bits
  78.  * (also defined in "mousex.h" of the graphics library)
  79.  */
  80. #ifndef M_MOTION
  81.  
  82. #define M_MOTION    0x001
  83. #define M_LEFT_DOWN    0x002
  84. #define M_LEFT_UP    0x004
  85. #define M_RIGHT_DOWN    0x008
  86. #define M_RIGHT_UP    0x010
  87. #define M_MIDDLE_DOWN    0x020
  88. #define M_MIDDLE_UP    0x040
  89. #define M_BUTTON_DOWN    (M_LEFT_DOWN | M_MIDDLE_DOWN | M_RIGHT_DOWN)
  90. #define M_BUTTON_UP    (M_LEFT_UP   | M_MIDDLE_UP   | M_RIGHT_UP)
  91. #define M_BUTTON_CHANGE (M_BUTTON_UP | M_BUTTON_DOWN )
  92.  
  93. /*
  94.  * MOUSE button status bits
  95.  */
  96. #define M_LEFT        1
  97. #define M_RIGHT        2
  98. #define M_MIDDLE    4
  99.  
  100. #endif  /* M_MOTION */
  101.  
  102. /*
  103.  * KEYBOARD status word bits
  104.  * (also defined in "mousex.h" of the graphics library)
  105.  */
  106. #ifndef KB_SHIFT
  107.  
  108. #define KB_RIGHTSHIFT    0x01        /* right shift key depressed */
  109. #define KB_LEFTSHIFT    0x02        /* left shift key depressed */
  110. #define KB_CTRL        0x04        /* CTRL depressed */
  111. #define KB_ALT        0x08        /* ALT depressed */
  112. #define KB_SCROLLOCK    0x10        /* SCROLL LOCK active */
  113. #define KB_NUMLOCK    0x20        /* NUM LOCK active */
  114. #define KB_CAPSLOCK    0x40        /* CAPS LOCK active */
  115. #define KB_INSERT    0x80        /* INSERT state active */
  116.  
  117. #define KB_SHIFT    (KB_LEFTSHIFT | KB_RIGHTSHIFT)
  118.  
  119. #endif  /* KB_SHIFT */
  120.  
  121. /*
  122.  * set this bit in 'evq_enable' to generate the corresponding event
  123.  */
  124. #define EVENT_ENABLE(type)    (1 << (type))
  125.  
  126. /*
  127.  * prototypes
  128.  */
  129. EventQueue *EventQueueInit(int qsize,int ms_stksize,void (*msdraw)(void));
  130. void        EventQueueDeInit(void);
  131. int        EventQueueNextEvent(EventQueue *q,EventRecord *e);
  132.  
  133. #ifdef __cplusplus
  134. }
  135. #endif
  136.  
  137. #endif /* whole file */
  138.  
  139.  
  140.